package oo.day06;

public class MulTypeDemo {

	/*多态：
	 * 1)意义：
	 * 		1.1)同一类型的引用指向不同的对象时，有不同的行为 ----行为的多态
	 * 		1.2)同一对象被造型为不同的类型时，有不同的行为     ----对象的多态
	 * 2)向上造型：
	 * 		2.1)父类型的引用指向子类的对象
	 * 		2.2)能造型成的类型有：
	 * 			父类型、实现的接口
	 * 3)强制类型转换，成功的条件有两个：
	 * 		3.1)引用所指向的对象，就是该类型
	 * 		3.2)引用所指向的对象，实现了该接口
	 * 4)建议强转之前通过instanceof来判断引用是否是该类型，返回值为boolean
	 * */
	
	
	public static void main(String[] args) {
		Aoo o1 = new Boo(); // 向上造型
		Inter1 o2 = (Inter1) o1; // 引用所指向的对象，实现了该接口
		Boo o3 = (Boo) o1; // 引用所指向的对象，就是该类型
		if (o1 instanceof Coo) {
			Coo o4 = (Coo) o1; // 不判断直接赋值会报错，类型转换异常
		}
	}

}

interface Inter1 {

}

class Aoo {

}

class Boo extends Aoo implements Inter1 {

}

class Coo extends Aoo {

}